home *** CD-ROM | disk | FTP | other *** search
- {===========================================================================
- Date: 10-09-93 (10:40)
- From: WIM VAN DER VEGT
- Subj: textmodes w/43/50 lines
- ---------------------------------------------------------------------------
- Here the uncodes sources of some routines I've written to replace
- turbo's internal textmode routines to enable 43 & 50 lines textmodes on
- VGA. They use the BIOS and can be combined with normal read/write
- statements. Just use the unit and call one of the Vgaxxlines routines.
-
- {---------------------------------------------------------}
- { Project : Vga Textmode Support }
- { By : G.W. van der Vegt }
- {---------------------------------------------------------}
- { Date .time Revision }
- { 931003.2200 Creatie. }
- {---------------------------------------------------------}
-
- Unit Vts_01;
-
- Interface
-
- Function MaxX : Byte;
-
- Function MaxY : Byte;
-
- Function WhereX : Byte;
-
- Function WhereY : Byte;
-
- Procedure GotoXY(x,y : Byte);
-
- Function GetXY(x,y : Byte) : Char;
-
- Procedure vga50lines;
-
- Procedure vga43lines;
-
- Procedure vga25lines;
-
- {---------------------------------------------------------}
-
- Implementation
-
- Uses
- Dos;
-
- {---------------------------------------------------------}
-
- Function MaxX : Byte;
-
- {----Return horizontal size of textmode in characters}
-
- Var
- r : Registers;
-
- Begin
- r.ah:=$0F;
- Intr($10,r);
- MaxX:=r.AH;
- End; {of MaxX}
-
- {---------------------------------------------------------}
-
- Function MaxY : Byte;
-
- {----Return vertical size of textmode in characters}
-
- Var
- r : Registers;
- buf : Array[0..63] Of byte;
-
- Begin
- r.ah:=$1B;
- r.bx:=$00;
- r.es:=Seg(buf);
- r.di:=Ofs(buf);
- Intr($10,r);
- MaxY:=buf[$22];
- End; {of MaxY}
-
- {---------------------------------------------------------}
-
- Function WhereX : Byte;
-
- {----WhereX, aware of textmodes larger than 80x25}
-
- Var
- r : registers;
-
- Begin
- r.ah:=$0f;
- Intr($10,r);
- r.ah:=$03;
- Intr($10,r);
- WhereX:=r.dl;
- End; {of WhereX}
-
- {---------------------------------------------------------}
-
- Function WhereY : Byte;
-
- {----WhereY, aware of textmodes larger than 80x25}
-
-
- Var
- r : registers;
-
- Begin
- r.ah:=$0f;
- Intr($10,r);
- r.ah:=$03;
- Intr($10,r);
- WhereY:=r.dh;
- End; {of WhereY}
-
- {---------------------------------------------------------}
-
- Procedure GotoXY(x,y : Byte);
-
- {----GotoXY, aware of textmodes larger than 80x25}
-
- Var
- r : registers;
-
- Begin
- r.ah:=$0f;
- Intr($10,r);
- r.ah:=$02;
- r.dh:=y;
- r.dl:=x;
- Intr($10,r);
- End; {of GotoXY}
-
- {---------------------------------------------------------}
-
- Function GetXY(x,y : Byte) : Char;
-
- {----GetXY, returns char at x,y and is aware of textmodes larger than 80x25}
- { leave cursor unchanged. }
-
- Var
- r : registers;
- xs,ys : Byte;
- Begin
- xs:=WhereX;
- ys:=WhereY;
- GotoXY(x,y);
- r.ah:=$0f;
- Intr($10,r);
- r.ah:=$08;
- Intr($10,r);
- GetXY:=Chr(r.al);
- GotoXY(xs,ys);
- End; {of GotoXY}
-
- {---------------------------------------------------------}
-
- Procedure vga50lines;
-
- {----Put VGA display into 80x50 textmode}
-
- Var
- r : registers;
- b : Byte;
-
- Begin
- {----50 line mode}
- b:=Mem[$40:$87];
- Mem[$40:$87]:=Mem[$40:$87] OR $01;
- r.ah:=$11;
- r.al:=$12; {----8x8 Character set}
- r.bl:=$00;
- Intr($10,r);
- Mem[$40:$87]:=b;
-
- {----400 scan lines neccesary}
- r.ah:=$12;
- r.al:=$02; {----400}
- r.bl:=$30;
- Intr($10,r);
- End; {of Vga50lines}
-
- {---------------------------------------------------------}
-
- Procedure vga43lines;
-
- {----Put VGA display into 80x43 (EGA) textmode}
-
- Var
- r : registers;
- b : Byte;
-
- Begin
- {----43 line mode}
- b:=Mem[$40:$87];
- Mem[$40:$87]:=Mem[$40:$87] OR $01;
- r.ah:=$11;
- r.al:=$12; {----8x8 Character set}
- r.bl:=$00;
- Intr($10,r);
- Mem[$40:$87]:=b;
-
- {----350 scan lines neccesary}
- r.ah:=$12;
- r.al:=$01; {----350}
- r.bl:=$30;
- Intr($10,r);
- End; {of Vga43lines}
-
- {---------------------------------------------------------}
-
- Procedure vga25lines;
-
- {----Put VGA display into 80x25 textmode}
-
- Var
- r : registers;
- b : Byte;
-
- Begin
- {----25 line mode}
- b:=Mem[$40:$87];
- Mem[$40:$87]:=Mem[$40:$87] OR $01;
- r.ah:=$11;
- r.al:=$11; {----8x14 Character set}
- r.bl:=$00;
- Intr($10,r);
- Mem[$40:$87]:=b;
-
- {----400 scan lines neccesary}
- r.ah:=$12;
- r.al:=$02; {----400}
- r.bl:=$30;
- Intr($10,r);
- End; {of Vga25lines}
-
- End.